iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
0
AI & Data

量化投資與機器學習研究系列 第 16

16.rolling移動窗口計算

  • 分享至 

  • xImage
  •  
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['figure.figsize'] = (15, 10)
plt.rcParams['font.sans-serif']='STZhongsong'
plt.rcParams['axes.unicode_minus'] = False
data50=pd.read_csv('data0050_1029.csv')
data50.head()

下載資料

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>市場別</th>
      <th>產業別</th>
      <th>name</th>
      <th>code</th>
      <th>date</th>
      <th>成交股數</th>
      <th>成交金額</th>
      <th>開盤價</th>
      <th>最高價</th>
      <th>最低價</th>
      <th>...</th>
      <th>外陸資賣出</th>
      <th>投信買賣超</th>
      <th>投信買進</th>
      <th>投信賣出</th>
      <th>自營商買賣超</th>
      <th>自營商買賣超避險</th>
      <th>自營商買進</th>
      <th>自營商買進避險</th>
      <th>自營商賣出</th>
      <th>自營商賣出避險</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>上市</td>
      <td>NaN</td>
      <td>元大台灣50</td>
      <td>50</td>
      <td>2018/01/16</td>
      <td>3955</td>
      <td>335496</td>
      <td>84.65</td>
      <td>85.00</td>
      <td>84.50</td>
      <td>...</td>
      <td>1004.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>39.0</td>
      <td>0.0</td>
      <td>487.0</td>
      <td>0.0</td>
      <td>448.0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>上市</td>
      <td>NaN</td>
      <td>元大台灣50</td>
      <td>50</td>
      <td>2018/01/17</td>
      <td>5698</td>
      <td>485174</td>
      <td>84.65</td>
      <td>85.45</td>
      <td>84.65</td>
      <td>...</td>
      <td>35.0</td>
      <td>-250.0</td>
      <td>0.0</td>
      <td>250.0</td>
      <td>-844.0</td>
      <td>-825.0</td>
      <td>57.0</td>
      <td>607.0</td>
      <td>901.0</td>
      <td>1432.0</td>
    </tr>
    <tr>
      <th>2</th>
      <td>上市</td>
      <td>NaN</td>
      <td>元大台灣50</td>
      <td>50</td>
      <td>2018/01/18</td>
      <td>6898</td>
      <td>594091</td>
      <td>85.50</td>
      <td>86.55</td>
      <td>85.50</td>
      <td>...</td>
      <td>101.0</td>
      <td>257.0</td>
      <td>377.0</td>
      <td>120.0</td>
      <td>399.0</td>
      <td>1989.0</td>
      <td>516.0</td>
      <td>2135.0</td>
      <td>117.0</td>
      <td>146.0</td>
    </tr>
data50=data50.set_index('date')

rolling
可以算5MA、20MA.....

Parameters:

window : int, or offset
可以取數字為一個區間計算或用offset
offset可以看http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases

min_periods : int, default None
區間最少要有多少筆數據,window是int跟window一樣
window是offset預設是1

center : boolean, default False
可以改True把值放中間,前後會是NaN

win_type : string, default None
不同權重的窗口,根據不同方法
https://docs.scipy.org/doc/scipy/reference/signal.html#window-functions

closed : string, default None
區間的開閉

一般大概只會用到window

data50['三大法人買賣超5天'] = data50['三大法人買賣超'].rolling(window=5).sum()

data50[['收盤價', '三大法人買賣超5天']].plot(subplots=True, figsize=(15, 10), grid=True)
array([<matplotlib.axes._subplots.AxesSubplot object at 0x00000215918EA710>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0000021591C272B0>],
      dtype=object)

https://ithelp.ithome.com.tw/upload/images/20181030/201034191JuBxCyNW5.png

可以由圖看出"三大法人買賣超5天累積"跟"收盤價" 兩者有相關

算兩者窗口的相關係數
https://pandas-docs.github.io/pandas-docs-travis/generated/pandas.core.window.Rolling.corr.html

data50['三大法人買賣超'].rolling(5).corr(data50['收盤價']).mean()
0.6814114604191231
data50['外陸資買賣超'].rolling(5).corr(data50['收盤價']).mean()
0.6070778475079339

可以知道0050跟外資有關聯,不過這是大家都知道的事,如果要有預測效果我們位移10天(shift(10)),用10天前的資料算5天窗口的未來收盤價的係數平均

data50['三大法人買賣超'].shift(10).rolling(5).corr(data50['收盤價']).mean()
0.4668449871862564

還是有滿不錯的相關性,所以針對0050可以用前面10或N天的買賣超作預測的其中一個特徵,再用這種方法找尋有相關的變數,例如費半跟台股大盤的相關性

r = data50.rolling(1)

# dir(r)

rolling除了sum和corr 還可以用以下的方法
'agg',
'aggregate',
'apply',
'code',
'corr',
'count',
'cov',
'exclusions',
'is_datetimelike',
'is_freq_type',
'kurt',
'max',
'mean',
'median',
'min',
'name',
'ndim',
'quantile',
'skew',
'std',
'sum',
'validate',
'var',


上一篇
15.各券商分點地址、經緯度(做地緣券商)
下一篇
17.上市、上櫃個股融資、融券
系列文
量化投資與機器學習研究30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言